/*
 * :Author: Alice.fang
 * :Date: 2022-10-14 14:33:27
 * :LastEditors: Alice.fang
 * :LastEditTime: 2022-10-21 16:12:32
 * :Description:language
 */
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import { LOCAL_KEY } from '@/constant/dict';

// 引入element ui自带语言包
import ElementUILocale from 'element-ui/lib/locale';
import enLocale from 'element-ui/lib/locale/lang/en';
import zhLocale from 'element-ui/lib/locale/lang/zh-CN';
import esLocale from 'element-ui/lib/locale/lang/es'; //西班牙语
import frLocale from 'element-ui/lib/locale/lang/fr'; //法语
import deLocale from 'element-ui/lib/locale/lang/de'; //德语
import itLocale from 'element-ui/lib/locale/lang/it'; //意大利
import ptLocale from 'element-ui/lib/locale/lang/pt'; //葡萄牙语
import arLocale from 'element-ui/lib/locale/lang/ar'; //阿拉伯语

Vue.use(VueI18n);

const DEFAULT_LANG = 'en'; // 默认语言为英文
const LOCALE_KEY = LOCAL_KEY.IS_CURRENT_LANGUAGE; // localStorage来存放的key，名字随便定，接下来会用到

const locales = {
    // 引入zh.json、en.json以及es.json（西班牙语）
    zh: require('./zh.json'),
    en: require('./en.json'),
    // es: require('./es.json'),
    // fr: require('./fr.json'),
    // de: require('./de.json'),
    // it: require('./it.json'),
    // pt: require('./pt.json'),
    // ar: require('./ar.json')
};

// 创建vue-i18n实例i18n
const i18n = new VueI18n({
    // 设置默认语言
    locale: DEFAULT_LANG, // 语言标识
    // 添加多语言（每一个语言标示对应一个语言文件）
    messages: locales // 语言包，上边创建的json文件
});

const UIlocales = {
    zh: zhLocale,
    en: enLocale,
    // es: esLocale,
    // fr: frLocale,
    // de: deLocale,
    // it: itLocale,
    // pt: ptLocale,
    // ar: arLocale
};

// 通过判断lang语言标志符来return先对应的语言
const setUIlocales = (lang) => {
    switch (lang) {
        case 'zh':
            return UIlocales.zh;
        case 'en':
            return UIlocales.en;
        // case 'es':
        //     return UIlocales.es;
        // case 'fr':
        //     return UIlocales.fr;
        // case 'de':
        //     return UIlocales.de;
        // case 'it':
        //     return UIlocales.it;
        // case 'pt':
        //     return UIlocales.pt;
        // case 'ar':
        //     return UIlocales.ar;
    }
};

export const setup = (lang) => {
    //切换语言的函数，lang为语言标识，en或者zh
    // 在此判断lang的值，如果未定义，则让lang默认为DEFAULT_LANG，目的是为了让用户在未选择语言的时候默认为英文。
    if (lang == undefined) {
        lang = window.localStorage.getItem(LOCALE_KEY);
        if (locales[lang] == undefined) {
            lang = DEFAULT_LANG;
        }
    }
    // 若lang有值，那么存入localStorage中，key为LOCALE_KEY,value为lang。
    window.localStorage.setItem(LOCALE_KEY, lang);

    document.body.setAttribute('lang', lang);
    document.documentElement.dir = lang == 'ar' ? 'rtl' : 'ltr';

    Vue.config.lang = lang;
    i18n.locale = lang;
    ElementUILocale.use(setUIlocales(lang)); // element ui 切换语言
};

setup();
export default i18n;
